//
//  Tools.m
//  BlueToothPeripheral
//
//  Created by US bike on 2017/8/7.
//  Copyright © 2017年 US bike. All rights reserved.
//

#import "Tools.h"

@implementation Tools

#pragma mark - 日志方法
+ (void) debugLog:(NSString *) logStr AndTextView:(UITextView *) textView {
    NSLog(@"%@", logStr);
    textView.text = [NSString stringWithFormat:@"%@\n%@",textView.text, logStr];
    [textView scrollRangeToVisible:NSMakeRange(0, textView.text.length)];
}



//异或操作
+ (Byte) xorByteA:(Byte) a AndByteB:(Byte) b {
    
    return (Byte) (0xFF & ((0xFF & a) ^ (0xFF & b)));
}

+ (Byte) xorsBytes:(Byte) byte, ...NS_REQUIRES_NIL_TERMINATION {
    if (byte) {
        // 取出第一个参数
        Byte a = byte;
        
        // 定义一个指向个数可变的参数列表指针；
        va_list args; // 用于存放取出的参数
        Byte b;
        va_start(args, byte); // 遍历全部参数 va_arg返回可变的参数(a_arg的第二个参数是你要返回的参数的类型)
        while ((b = va_arg(args, int))) {
            a = [self xorByteA:a AndByteB:b];
        }
        // 清空参数列表，并置参数指针args无效
        va_end(args);
        
        return a;
    }
    
    NSAssert(byte, @"至少要有一个参数");
    return 0x00;
}

+ (void) test {
    Byte a = 0xF2;
    Byte b = 0xA0;
    Byte c = 0xCA;
    Byte d = 0x8D;
    Byte e = 0x55;
    
    
    Byte result1 = [self xorByteA:a AndByteB:b];
    Byte result2 = [self xorByteA:a AndByteB:c];
    Byte result3 = [self xorByteA:a AndByteB:d];
    Byte result4 = [self xorByteA:a AndByteB:e];
    Byte result5 = [self xorByteA:b AndByteB:b];
    
    
    Byte resultAll =[self xorsBytes:a,b,c,d,e, nil]; //40
    
    
}

@end
